package com.ksyun.seckill.service;

import com.ksyun.seckill.constants.SecKillImplVer;
import com.ksyun.seckill.entity.PurchaseOrder;
import org.springframework.transaction.annotation.Transactional;

import java.beans.Transient;


/**
 * @author ksc
 */
public interface SkService {

    /**
     * 生成秒杀URL路径.
     * @param campaignId  活动id.
     * @param phone  手机号.
     * @param verifyCode  验证码
     * @return
     */
    default String generateSecKillPath(Long campaignId, String phone, String verifyCode) {
        return "abc";
    }

    /**
     * 检查秒杀URL路径合法性.
     * @param campaignId  活动id.
     * @param phone  手机号.
     * @param path  秒杀URL路径.
     * @return
     */
    default boolean checkSecKillPath(Long campaignId, String phone, String path) {
        return true;
    }

    /**
     * 检验秒杀活动的合法性，如活动是不存在，活动是否允许参与秒杀等.
     * @param campaignId  活动id.
     */
    void validateCampaign(Long campaignId);

    /**
     * 指定活动，用户是否已下过单，同一个手机号，同一个活动，只能参与一次.
     * @param campaignId  活动id.
     * @param phone  手机号.
     * @return
     */
    Boolean haveOrder(Long campaignId, String phone);

    /**
     * 秒杀.
     * @param campaignId  活动id.
     * @param phone  手机号.
     * @param path  秒杀URL路径.
     */
    @Transactional
    void secKill(Long campaignId, String phone, String path);

    /**
     * 服务实现版本.
     * @return
     */
    SecKillImplVer getSecKillImplVer();

}
